from fastapi import FastAPI

from enum import Enum

app = FastAPI()


# 简单类型
@app.get("/users/{username}")
async def read_user(username: str):
    return {"username": username}


class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"


# 枚举类型
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
    # 获取 lenet 值的时候 自动转换为 model_name.lenet.value
    return {"model_name": model_name.value}


# 数据检验
@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}


# 路径中的路径参数
@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
    return {"file_path": file_path}


# 如果当前模块是主模块（直接运行而非导入）
if __name__ == "__main__":
    # 导入uvicorn模块
    import uvicorn

    # 使用uvicorn.run方法启动FastAPI应用
    # 参数说明：
    # - app：要运行的FastAPI应用实例
    # - host：监听的IP地址，默认为'127.0.0.1'，这里显式指定为本地环回地址
    # - port：监听的端口号，默认为8000，这里同样明确指定
    # - reload：是否启用自动重载，默认为False，在开发模式下设置为True可以让修改后的代码立即生效，无需重启服务器
    uvicorn.run(app,
                host="127.0.0.1",
                port=8000,
                reload=True)